4.5

推导输出为 o 的单个单元的梯度下降训练法则,其中

o=w0+w1x1+w1x12++wnxn+wnxn2 o = w_0 + w_1 x_1 + w_1 x^2_1 + \dots + w_n x_n + w_n x^2_n .


我们怎样才能计算出沿着误差曲面最陡峭下降的方向呢?可以通过计算 EE 相对向量 w\vec{w} 的每个分量的导数来得到这个方向。

其中 E(w)=12dD(tdod)2E(\vec{w}) = \frac{1}{2} \sum_{d \in D} (t_d - o_d)^2

这个向量导数被称为 EE 对于 w\vec{w} 的梯度,记作 E(w)\triangledown E(\vec{w})

E(w)[Ew0,Ew1,,Ewn] \triangledown E(\vec{w}) \equiv [\frac{\partial E}{\partial w_0}, \frac{\partial E}{\partial w_1}, \dots, \frac{\partial E}{\partial w_n}]

当梯度被解释为权空间的一个向量时,它确定了使 E 最陡峭上升的方向。所以这个向量的反方向给出了最陡峭下降的方向。

既然梯度确定了 E 最陡峭上升的方向,那么梯度下降的训练法则是:

ww+Δw \vec{w} \leftarrow \vec{w} + \Delta \vec{w}

其中:

Δw=ηE(w) \Delta \vec{w} = -\eta \triangledown E(\vec{w})

这里 η\eta 是一个正的常数叫做学习速率,它决定梯度下降搜索中的步长。公式中的负号是因为我们想让权向量向 E 下降的方向移动。这个训练法则也可以写成它的分量形式:

wiwi+Δwi w_i \leftarrow w_i + \Delta w_i

其中:

Δwi=ηEwi(1) \Delta w_i = - \eta \frac{\partial E}{\partial w_i} \tag{1}

这样很清楚,最陡峭的下降可以按照比例 Ewi\frac{\partial E}{\partial w_i} 改变 w\vec{w} 中的每一个分量wiw_i来实现。

要形成一个根据公式(1)(1)迭代更新权值的实用算法,我们需要一个高效的方法在每一步都计算这个梯度,得到组成这个梯度向量的分量Ewi\frac{\partial E}{\partial w_i}的过程如下:

Ewi=wi12dD(tdod)2=12dDwi(tdod)2=12dD2(tdod)wi(tdod)=dD(tdod)wi(td(w0+w1x1d+w1x1d2++wnxnd+wnxnd2))=dD(tdod)(witdwi(w0+w1x1d+w1x1d2++wnxnd+wnxnd2))=dD(tdod)(0wi(wixid+wixid2))Ewi=dD(tdod)(xidxid2)=dD(tdod)(xid)(1+xid)(2) \frac{\partial E}{\partial w_i} = \frac{\partial}{\partial w_i}\frac{1}{2}\sum_{d \in D}(t_d-o_d)^2 = \frac{1}{2}\sum_{d\in D}\frac{\partial}{\partial w_i}(t_d - o_d)^2 \\ = \frac{1}{2}\sum_{d \in D} 2 (t_d - o_d)\frac{\partial}{\partial w_i}(t_d - o_d) \\ = \sum_{d \in D}(t_d - o_d)\frac{\partial}{\partial w_i}(t_d - (w_{0} + w_{1} x_{1d} + w_1 x^2_{1d} + \dots + w_n x_{nd} + w_n x^2_{nd})) \\ = \sum_{d \in D}(t_d - o_d)(\frac{\partial}{\partial w_i} t_d - \frac{\partial}{\partial w_i} (w_0 + w_1 x_{1d} + w_1 x^2_{1d} + \dots + w_n x_{nd} + w_n x^2_{nd})) \\ = \sum_{d \in D}(t_d - o_d)(0 - \frac{\partial}{\partial w_i} (w_i x_{id} + w_i x^2_{id})) \\ \\ \frac{\partial E}{\partial w_i}=\sum_{d \in D}(t_d - o_d)(-x_{id}-x^2_{id}) = \sum_{d \in D}(t_d - o_d)(-x_{id})(1+x_{id}) \tag{2}

其中,xid 表示训练样例dd的一个输入分量xix_i。现在我们有了一个公式,能够用线性单元的输入 xid 、输出odo_d以及训练样例的目标值 tdt_d 表示 Ewi\frac{\partial E}{\partial w_i}。把公式(2)代入公式(1)便得到了梯度下降权值更新法则。

Δwi=ηdD(tdod)xid(1+xid)(3) \Delta w_i = \eta \sum_{d \in D}(t_d - o_d)x_{id}(1+x_{id}) \tag{3}

总而言之,训练单个单元的梯度下降算法如下:选取一个初始的随机权向量;应用单个单元到所有的训练样例,然后根据公式(3)计算每个权值的 Δwi\Delta w_i;通过加上Δwi\Delta w_i来更新每个权值,然后重复这个过程。

因为误差曲面仅包含一个全局的最小值,所以无论训练样例是否线性可分,这个算法会收敛到具有最小误差的权向量,条件是必须使用一个足够小的学习速率 η\eta。如果η\eta太大,梯度下降搜索就有越过误差曲面最小值而不是停留在那一点的危险。因此,对此算法的一种常用的改进方法是随着梯度下降步数的增加逐渐减小 η\eta 的值。

这个训练法则的实现详见代码:https://github.com/Jeff-Tian/perceptron/commit/7129ef7fd27a44a25f179442471076e7d8dc2c8d#diff-51309ec726b9ebb0b1e4b5eb838ce31e5cb5812c5b25dadbb9d7e8ece84c0e6f

results matching ""

    No results matching ""